package com.zhouxl.langzhong;


import org.dom4j.*;

import java.util.HashMap;
import java.util.List;


/**
 * @ClassName 金强
 * @Description TODO
 * @Author 31527
 * @Date 2021/5/23 14:42
 * @Version 1.0
 */
public class XmlUtil {

    HashMap<String, String> nodeMap=new HashMap<String,String>();
    HashMap<String, String> attributeMap=new HashMap<String,String>();
    String fileNodeName="";
    /**
     * @author:	shen
     * @date  : 2019年2月22日 下午3:54:56
     * @Title : getNodeValue
     * @Description: 获取xml中指定节点名字的值
     * @param xml 字符串
     * @param nodeName 节点名字
     * @return  nodeValue 节点值
     */
    public  String getNodeValue(String xml, String nodeName) {
        Document document = null;
        String value = "";
        nodeMap.clear();		//先清空，如果想加快效率，就一个请求结果存一次map,然后再从map里取，用完就清空
        attributeMap.clear();	//先清空
        try {
            document = DocumentHelper.parseText(xml);
            Element root = document.getRootElement();
            getNodes(root);
            value=nodeMap.get(nodeName);
            //System.out.println("---->"+value);
        } catch (DocumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return value;
    }
    /**
     * @author:	shen
     * @date  : 2019年2月22日 下午3:55:56
     * @Title : getAttributeValue
     * @Description: 获取xml中指定节点名字指定属性名字的值
     * @param xml 字符串
     * @param nodeName 节点名字
     * @param attributeName 属性名字
     * @return  attributeValue 属性值
     */
    public  String getAttributeValue(String xml,String nodeName, String attributeName) {
        Document document = null;
        String attributeValue = "";
        fileNodeName=nodeName;
        try {
            document = DocumentHelper.parseText(xml);
            Element root = document.getRootElement();
            getNodes(root);
            attributeValue=attributeMap.get(attributeName);
            //System.out.println("---->"+value);
        } catch (DocumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return attributeValue;
    }


    public void getNodes(Element node) {
        //System.out.println("------------------");
        //System.out.println("当前节点名称："+node.getName());
        //System.out.println("当前节点的内容："+node.getTextTrim());
        nodeMap.put(node.getName(), node.getTextTrim());
        if (node.getName().equals(fileNodeName)) {
            // 当前节点所有属性的list
            List<Attribute> list = node.attributes();
            // 遍历当前节点的所有属性
            for (Attribute attribute : list) {
                //System.out.println("属性名称:" + attribute.getName() + "属性值:" + attribute.getValue());
                attributeMap.put(attribute.getName(), attribute.getValue());
            }
        }


        // 递归遍历当前节点所有的子节点
        List<Element> listElement = node.elements();// 所有一级子节点的list
        for (Element e : listElement) {// 遍历所有一级子节点
            this.getNodes(e);// 递归
        }
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String xmlStr = "<?xml version=\"1.0\" encoding=\"gbk\"?>" + "<business id=\"97008\" comment=\"证书操作\">"
                + "<body id=\"123456\">" + "<returncode>返回代码</returncode>" + "<returnmsg>返回信息</returnmsg>" + "</body>"
                + "</business>";
        //AqdlAPI testXML = new AqdlAPI();
        // testXML.CreatZSCZXML();
        //testXML.CreateXML_ZXBBXXCXXML("", "");
        //System.out.println(testXML.readNodeValue(xmlStr, "returnmsg"));
        System.out.println("returnmsg:"+new XmlUtil().getNodeValue(xmlStr, "returnmsg"));
        System.out.println("business->id:"+new XmlUtil().getAttributeValue(xmlStr,"business", "id"));
        System.out.println("body->id:"+new XmlUtil().getAttributeValue(xmlStr,"body", "id"));
    }


}
